home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGASIC / BASFILES.LZH / MSKINPUT.BAS < prev    next >
BASIC Source File  |  1988-09-10  |  6KB  |  285 lines

  1. '$INCLUDE:'QBTOOLS.INC'
  2. '' '$INCLUDE: 'qbtools2.inc'
  3.  
  4.   SUB MaskInput (Allowup%, Allowpu%, Allowdn%, Allowpd%, Allowrt%, Allowtb%, Allowes%, il%, St$, Xc%, Yc%, fc%, Bc%, UpperCaseFlag%, ExitKey%, Mask$) STATIC
  5.  
  6.         CONST MASKVALUES = "()-/\[]{}:<>.=+;,?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "
  7.                   
  8.         InsStatus% = 0                '  Insert flag
  9.                   
  10.         IF LEN(St$) > il% THEN        '  String is already too long
  11.             St$ = MID$(St$, 1, il%)    '  Make it the right size
  12.         END IF
  13.  
  14.         IF LEN(St$) < il% THEN        '  MUST make it equal to BLANKS
  15.             St$ = St$ + STRING$(il% - LEN(St$), 32)
  16.         END IF
  17.  
  18.         IF LEN(Mask$) <> il% THEN
  19.             ExitKey% = 0
  20.             EXIT SUB
  21.         END IF
  22.  
  23.         InChar% = 0
  24.  
  25.         FOR j% = 1 TO il%
  26.             InChar% = InChar% + ABS(INSTR(MASKVALUES, MID$(Mask$, j%, 1)) > 0)
  27.         NEXT j%
  28.  
  29.         IF InChar% = il% THEN
  30.             EXIT SUB
  31.         END IF
  32.         FOR j% = 1 TO il%
  33.             ch$ = MID$(Mask$, j%, 1)
  34.             SELECT CASE ch$
  35.                 CASE "(", ")", "-", "/", "\", "[", "]", "{", "}", ":", "<", ">", ".", "=", "+", ";", ",", "?", "A" TO "Z", "a" TO "z", " "
  36.                     MID$(St$, j%, 1) = ch$
  37.                 CASE ELSE
  38.             END SELECT
  39.         NEXT j%
  40.  
  41.         MaskBackup$ = St$
  42.  
  43.         Xoff% = 1                     '  X-co-ordinate offset
  44.         Attr% = Attributes%(fc%, Bc%, 0, 0)
  45.         ExitKey% = 0
  46.         ColorPrint St$, Yc%, Xc%, Attr%
  47.  
  48.         DO                            '  Until there's an exit
  49.  
  50.             DO
  51.                 IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) THEN
  52.                     Xoff% = Xoff% + 1
  53.                 ELSE
  54.                     EXIT DO
  55.                 END IF
  56.                             
  57.                 IF Xoff% > il% THEN
  58.                     Xoff% = il%
  59.                   
  60.                     DO
  61.                         IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) THEN
  62.                             Xoff% = Xoff% - 1
  63.                         ELSE
  64.                             EXIT DO
  65.                         END IF
  66.                     LOOP
  67.               
  68.                 END IF
  69.  
  70.             LOOP
  71.  
  72.             IF Xoff% > il% THEN        '  Cursor positioner too long
  73.                 Xoff% = il%
  74.             END IF
  75.  
  76.             IF Xoff% < 1 THEN
  77.                 Xoff% = 1
  78.             END IF
  79.  
  80.             ColorPrint St$, Yc%, Xc%, Attr%
  81.  
  82.             IF InsStatus% = 1 THEN        '  Insert is on
  83.                 LOCATE Yc%, Xc% + Xoff% - 1, 1, 0, 15
  84.             ELSE
  85.                 LOCATE Yc%, Xc% + Xoff% - 1, 1, 7, 7
  86.             END IF
  87.  
  88.             w$ = ""                    '  Wait until there's a character
  89.             WHILE w$ = ""
  90.                 w$ = INKEY$
  91.             WEND
  92.             LOCATE , , 0
  93.  
  94.             IF LEN(w$) = 1 THEN        '  Normal character
  95.                           
  96.                 Test$ = MID$(Mask$, Xoff%, 1)
  97.                          
  98.                 ch% = ASC(w$)
  99.                       
  100.                     IF ch% = 13 THEN
  101.                         IF Allowrt% = 1 THEN '  Yes, return is ok
  102.                             ExitKey% = 5
  103.                             EXIT DO
  104.                         END IF
  105.                     END IF
  106.  
  107.                     IF ch% = 9 THEN
  108.                         IF Allowtb% = 1 THEN '  Yes, TAB is ok
  109.                             ExitKey% = 6
  110.                             EXIT DO
  111.                         END IF
  112.                     END IF
  113.  
  114.                     IF ch% = 27 THEN
  115.                         IF Allowes% = 1 THEN '  Yes, ESC is ok
  116.                             ExitKey% = 7
  117.                             EXIT DO
  118.                         END IF
  119.                     END IF
  120.                 IF Test$ >= "0" AND Test$ <= "9" THEN
  121.                     IF w$ <= Test$ THEN
  122.                         ch% = ASC(w$)
  123.                     ELSE
  124.                         ch% = 0
  125.                     END IF
  126.                 END IF
  127.                       
  128.                 IF Test$ = "&" THEN
  129.                     IF UCASE$(w$) >= "A" AND UCASE$(w$) <= "Z" OR w$ = " " THEN
  130.                         ch% = ASC(w$)
  131.                     ELSE
  132.                         ch% = 0
  133.                     END IF
  134.                 END IF
  135.  
  136.                 SELECT CASE ch%
  137.  
  138.                     CASE 32 TO 126       '  Normal displayable char
  139.                         IF UpperCaseFlag% = 1 THEN  '  Make it upper
  140.                             w$ = UCASE$(w$)
  141.                             ch% = ASC(w$)
  142.                         END IF
  143.  
  144.                         IF UpperCaseFlag% = 2 THEN  '  Make it lower
  145.                             w$ = LCASE$(w$)
  146.                             ch% = ASC(w$)
  147.                         END IF
  148.                                   
  149.                         MID$(St$, Xoff%, 1) = CHR$(ch%)
  150.                         Xoff% = Xoff% + 1
  151.  
  152.                     CASE 8, 127          '  Back space
  153.                         IF Xoff% > 1 THEN
  154.                             Xoff% = Xoff% - 1
  155.                             IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) = 0 THEN
  156.                                 MID$(St$, Xoff%, 1) = " "
  157.                             END IF
  158.                                                                  
  159.                             DO
  160.                                 IF Xoff% > 0 THEN
  161.                                     IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) THEN
  162.                                         Xoff% = Xoff% - 1
  163.                                     ELSE
  164.                                         MID$(St$, Xoff%, 1) = " "
  165.                                         EXIT DO
  166.                                     END IF
  167.                                 ELSE
  168.                                     EXIT DO
  169.                                 END IF
  170.                             LOOP
  171.  
  172.                             IF Xoff% = 0 THEN
  173.                                 DO
  174.                                     Xoff% = Xoff% + 1
  175.                                     IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) = 0 THEN
  176.                                         EXIT DO
  177.                                     ELSE
  178.                                         IF Xoff% = il% THEN
  179.                                             PRINT
  180.                                             PRINT "Illegal Mask"
  181.                                             PRINT
  182.                                             END
  183.                                         END IF
  184.                                     END IF
  185.                                 LOOP
  186.                             END IF
  187.                         END IF
  188.  
  189.  
  190.                         CASE ELSE
  191.                     END SELECT
  192.  
  193.                     ELSE
  194.                         ch% = ASC(MID$(w$, 2))  '  Extended character
  195.                         SELECT CASE ch%
  196.  
  197.                             CASE 75              '  Left arrow
  198.                               
  199.                                 IF Xoff% > 1 THEN
  200.                                     Xoff% = Xoff% - 1
  201.                                                                 
  202.                                 DO
  203.                                     IF Xoff% > 0 THEN
  204.                                         IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) THEN
  205.                                             Xoff% = Xoff% - 1
  206.                                         ELSE
  207.                                             EXIT DO
  208.                                         END IF
  209.                                     ELSE
  210.                                         EXIT DO
  211.                                     END IF
  212.                                 LOOP
  213.  
  214.                                 IF Xoff% = 0 THEN
  215.                                     DO
  216.                                         Xoff% = Xoff% + 1
  217.                                         IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) = 0 THEN
  218.                                             EXIT DO
  219.                                         ELSE
  220.                                             IF Xoff% = il% THEN
  221.                                                 PRINT
  222.                                                 PRINT "Illegal Mask"
  223.                                                 PRINT
  224.                                                 END
  225.                                             END IF
  226.                                         END IF
  227.                                     LOOP
  228.                                 END IF
  229.                             END IF
  230.                               
  231.  
  232.  
  233.                             CASE 77              '  Right arrow
  234.                                 Xoff% = Xoff% + 1
  235.  
  236.                             CASE 71              '  Home
  237.                                 Xoff% = 1
  238.  
  239.                             CASE 79              '  End
  240.                                 Xoff% = il%
  241.  
  242.                             CASE 82              '  Insert
  243.                                 InsStatus% = 1 - InsStatus%
  244.  
  245.                             CASE 83              '  Delete
  246.                                 IF INSTR(MASKVALUES, MID$(Mask$, Xoff%, 1)) = 0 THEN
  247.                                     MID$(St$, Xoff%, 1) = " "
  248.                                 END IF
  249.  
  250.                             CASE 72              '  Up arrow
  251.                                 IF Allowup% = 1 THEN '  Yes, UP is ok
  252.                                     ExitKey% = 1
  253.                                     EXIT DO
  254.                                 END IF
  255.  
  256.                             CASE 73              '  Page up
  257.                                 IF Allowpu% = 1 THEN '  Yes, PAGE UP is ok
  258.                                     ExitKey% = 2
  259.                                     EXIT DO
  260.                                 END IF
  261.  
  262.                             CASE 81              '  Page down
  263.                                 IF Allowpd% = 1 THEN '  Yes, PAGE DOWN is ok
  264.                                     ExitKey% = 4
  265.                                     EXIT DO
  266.                                 END IF
  267.  
  268.                             CASE 80              '  Down arrow
  269.                                 IF Allowdn% = 1 THEN '  Yes, DOWN is ok
  270.                                     ExitKey% = 3
  271.                                     EXIT DO
  272.                                 END IF
  273.  
  274.                             CASE 32              '  ALT+D (Delete)
  275.                                 St$ = MaskBackup$
  276.                                 Xoff% = 1
  277.  
  278.                             CASE ELSE
  279.                         END SELECT
  280.                     END IF
  281.                 LOOP WHILE ExitKey% = 0
  282.  
  283.             END SUB
  284.  
  285.